/**
 * @brief 线程安全的缓冲区
 */
#if !defined(__APP_BUFFER_H__)
#define __APP_BUFFER_H__

#include <pthread.h>

typedef struct BufferStruct
{
    // 缓存指针
    void *data;
    // 缓存总长度
    int total_len;
    // 数据的起始位置
    int start_offset;
    // 数据总长度
    int data_len;
    // 线程锁
    pthread_mutex_t lock;
} Buffer;

/**
 * @brief 初始化缓冲区
 *
 * @param buffer 缓冲区指针
 * @param len 缓冲区长度
 * @return int 0成功 -1失败
 */
int app_buffer_init(Buffer *buffer, int len);

/**
 * @brief 从缓冲区中读取数据
 *
 * @param buffer 缓冲区指针
 * @param buf 数据出来的二进制缓存指针
 * @param buf_len 数据缓冲区总长度
 * @return int -1失败，否则返回实际读取的长度
 */
int app_buffer_read(Buffer *buffer, void *buf, int buf_len);

/**
 * @brief 向缓冲区中写数据
 * 
 * @param buffer 
 * @param buf 
 * @param buf_len 
 * @return int 0成功 -1失败
 */
int app_buffer_write(Buffer *buffer, void *buf, int buf_len);

/**
 * @brief 释放缓冲区
 *
 * @param buffer 缓冲区指针
 */
void app_buffer_free(Buffer *buffer);

#endif // __APP_BUFFER_H__
